package com.webshrub.citizencomplaint.androidapp;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import java.io.*;
public class CitizenComplaintHttpUtil {
public static JSONObject getJSONFromUrl(Context context, String url) {
if (CitizenComplaintUtility.isDeviceOnline(context)) {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
try {
HttpResponse httpResponse = httpClient.execute(httpPost);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Log.w("CitizenComplaintHttpUtil", "Error " + statusCode + " while retrieving json from " + url);
return null;
}
HttpEntity httpEntity = httpResponse.getEntity();
if (httpEntity != null) {
InputStream inputStream = null;
try {
inputStream = httpEntity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
String json = sb.toString();
return new JSONObject(json);
} finally {
if (inputStream != null) {
inputStream.close();
}
httpEntity.consumeContent();
}
}
} catch (Exception e) {
httpPost.abort();
Log.e("CitizenComplaintHttpUtil", "Error while retrieving json from " + url + " message = " + e.getMessage());
}
}
return null;
}
public static Bitmap getBitmapFromUrl(Context context, String url) {
if (CitizenComplaintUtility.isDeviceOnline(context)) {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse httpResponse = httpClient.execute(httpGet);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
Log.e("CitizenComplaintHttpUtil", "Error " + statusCode + " while retrieving bitmap from " + url);
return null;
}
HttpEntity httpEntity = httpResponse.getEntity();
if (httpEntity != null) {
InputStream inputStream = null;
try {
inputStream = httpEntity.getContent();
return BitmapFactory.decodeStream(inputStream);
} finally {
if (inputStream != null) {
inputStream.close();
}
httpEntity.consumeContent();
}
}
} catch (Exception e) {
httpGet.abort();
Log.e("CitizenComplaintHttpUtil", "Error while retrieving bitmap from " + url + " message = " + e.getMessage());
}
}
return null;
}
public static void postComplaintDetails(Context context, CitizenComplaint citizenComplaint) {
try {
if (CitizenComplaintUtility.isDeviceOnline(context)) {
HttpParams httpParams = new BasicHttpParams();
httpParams.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParams);
HttpPost httppost = new HttpPost(CitizenComplaintConstants.CITIZEN_COMPLAINT_POST_URL_PARAMS);
MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntity.addPart(CitizenComplaintConstants.LATTITUDE_PARAMS, new StringBody("" + citizenComplaint.getLatitude()));
multipartEntity.addPart(CitizenComplaintConstants.LONGITUDE_PARAMS, new StringBody("" + citizenComplaint.getLongitude()));
multipartEntity.addPart(CitizenComplaintConstants.ISSUE_TYPE_PARAMS, new StringBody("" + citizenComplaint.getComplaintId()));
multipartEntity.addPart(CitizenComplaintConstants.TEMPLATE_ID_PARAMS, new StringBody("" + citizenComplaint.getSelectedTemplateId()));
multipartEntity.addPart(CitizenComplaintConstants.TEMPLATE_TEXT_PARAMS, new StringBody("" + citizenComplaint.getSelectedTemplateString()));
multipartEntity.addPart(CitizenComplaintConstants.REPORTER_ID_PARAMS, new StringBody("" + CitizenComplaintUtility.getDeviceIdentifier(context)));
multipartEntity.addPart(CitizenComplaintConstants.ADDRESS_PARAMS, new StringBody("" + citizenComplaint.getComplaintAddress()));
if (citizenComplaint.getSelectedComplaintImageUri() != null && !citizenComplaint.getSelectedComplaintImageUri().equals("")) {
File file = new File(citizenComplaint.getSelectedComplaintImageUri());
if (file.exists()) {
multipartEntity.addPart(CitizenComplaintConstants.IMAGE_URI_PARAMS, new FileBody(file));
}
}
if (citizenComplaint.getProfileThumbnailImageUri() != null && !citizenComplaint.getProfileThumbnailImageUri().equals("")) {
File file = new File(citizenComplaint.getProfileThumbnailImageUri());
if (file.exists()) {
multipartEntity.addPart(CitizenComplaintConstants.PROFILE_IMAGE_URI_PARAMS, new FileBody(file));
}
}
httppost.setEntity(multipartEntity);
httpClient.execute(httppost, new CitizenComplaintUploadResponseHandler());
CitizenComplaintDataSource.getInstance(context).deleteCitizenComplaint(citizenComplaint);
}
} catch (Exception e) {
Log.e("Complaint Upload", "Complaint Upload exception: " + e.getMessage());
}
}
private static class CitizenComplaintUploadResponseHandler implements ResponseHandler {
@Override
public Object handleResponse(HttpResponse response) throws IOException {
HttpEntity responseEntity = response.getEntity();
String responseString = EntityUtils.toString(responseEntity);
Log.d("UPLOAD", responseString);
return null;
}
}
}